package semantico;

import java.util.ArrayList;

public class Imprimir extends Codigo{

	Expressao expressao;
	
	public Imprimir(Expressao expressao){
		super();
		this.expressao = expressao;
	}
	
	/**
	 * Gera codigo de tres enderecos
	 * @param inicio - marca o inicio do codigo para o comando.
	 * @param primeiraInstrucaoApos - marca a primeira instrucao apos o codigo do comando.
	 * @throws SemanticoException 
	 */
	public void gerar(int inicio, int primeiraInstrucaoApos) throws SemanticoException{ //chamado com rotulos begin e after
		
		if(expressao instanceof FuncaoExecutarExpressao){
			if (((FuncaoExecutarExpressao)expressao).parametrosFuncao.size() > 0) {
				ArrayList<Expressao> parametrosFuncao = ((FuncaoExecutarExpressao)expressao).parametrosFuncao; 
				for (Expressao expressao : parametrosFuncao) {
					emitirCodigo("param " + expressao.toString());
				}
				emitirCodigo("print (rt (" + "call " + 
						((FuncaoExecutarExpressao)expressao).identificadorFuncao.toString() + 
						", " + parametrosFuncao.size() + ") )");
			}else{
				emitirCodigo("print (rt (" + "call " + 
						((FuncaoExecutarExpressao)expressao).identificadorFuncao.toString() + ", 0) )");
			}
		}else{
			emitirCodigo("print (" + expressao.gerarTermo().toString() + ")");
		}
	}
}
